# 这是CURSOR提示词，我根本就不懂代码，你们细品
# 你是sh助手智能体，现在让你制作一款提效工具
# 功能如下：
# 1.打开注册表编辑器找到这个路径：/var/lib/dbus/machine-id
# 2.修改注册表项目：machine-id，修改数值数据:80bb25c76cc842d782da3e9699d4320f
# 保留数值格式并随机生成。
# 3.修改该注册表好，生成备份文件到/system_id_file，没有该目录则创建，备份文件名为machine-id年月日时分.txt的日期格式。
# 4.找到路径: .config/Cursor/User/globalStorage/storage.json更改以下这4个数值，并保留格式，数值随机生成

#     "telemetry.sqmId": "",
#     "telemetry.macMachineId": "c3771154a4b4a10356bd243451a52a6df07985a2f420ac07d9181772e19b3c9e",
#     "telemetry.machineId": "0d3719051955001d43ff3f9585bad1a430ecd72ef75ec3de07e6016bbc380fa7",
#     "telemetry.devDeviceId": "42055e5f-aa81-4f03-aebf-a038b2376b0d",

# 5.将原来的.config/Cursor/User/globalStorage/storage.json文件备份到.config/Cursor/User/globalStorage/storage.json/backups目录下，备份文件名:storage年月日时分.json的日期格式
# 6.打印相应的的输出，并输出报错信息，方便调试



# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 获取真实用户的主目录
REAL_HOME=$(eval echo ~${SUDO_USER})

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO] $1${NC}"
}

log_error() {
    echo -e "${RED}[ERROR] $1${NC}"
}

log_warn() {
    echo -e "${YELLOW}[WARN] $1${NC}"
}

# 检查并安装必要的工具
check_dependencies() {
    log_info "检查必要的工具..."
    
    # 检查dos2unix
    if ! command -v dos2unix &> /dev/null; then
        log_warn "未找到dos2unix，正在安装..."
        sudo apt-get update -y &> /dev/null || { log_error "更新软件源失败"; return 1; }
        sudo apt-get install -y dos2unix || { log_error "安装dos2unix失败"; return 1; }
        log_info "dos2unix 安装成功"
    else
        log_info "dos2unix 已安装"
    fi

    # 检查xxd
    if ! command -v xxd &> /dev/null; then
        log_warn "未找到xxd，正在安装vim-common..."
        sudo apt-get install -y vim-common || { log_error "安装vim-common失败"; return 1; }
        log_info "xxd 安装成功"
    else
        log_info "xxd 已安装"
    fi

    # 检查uuidgen
    if ! command -v uuidgen &> /dev/null; then
        log_warn "未找到uuidgen，正在安装uuid-runtime..."
        sudo apt-get install -y uuid-runtime || { log_error "安装uuid-runtime失败"; return 1; }
        log_info "uuidgen 安装成功"
    else
        log_info "uuidgen 已安装"
    fi
}

# 定义配置文件路径
MACHINE_ID_PATH="/var/lib/dbus/machine-id"
BACKUP_DIR="/system_id_file"
CURSOR_CONFIG_DIR="$REAL_HOME/.config/Cursor/User/globalStorage"
STORAGE_JSON="$CURSOR_CONFIG_DIR/storage.json"
BACKUP_STORAGE_DIR="$CURSOR_CONFIG_DIR/backups"

# 在主函数前添加计数器相关函数
COUNT_FILE="$REAL_HOME/.cursor_count"

# 检查配置文件是否存在
check_config() {
    if [ ! -f "$STORAGE_JSON" ]; then
        log_error "找不到配置文件: $STORAGE_JSON"
        log_info "请确保已经安装并运行过 Cursor"
        exit 1
    fi
}

# 备份系统 ID
backup_system_id() {
    local timestamp=$(date '+%Y%m%d%H%M')
    if [ ! -d "$BACKUP_DIR" ]; then
        sudo mkdir -p "$BACKUP_DIR" || { log_error "创建备份目录失败"; return 1; }
    fi
    sudo cp "$MACHINE_ID_PATH" "$BACKUP_DIR/machine-id$timestamp.txt" || { log_error "备份系统ID失败"; return 1; }
    log_info "系统ID已备份到: $BACKUP_DIR/machine-id$timestamp.txt"
}

# 备份配置文件storage.json
backup_storage_json() {
    local timestamp=$(date '+%Y%m%d%H%M')
    if [ ! -d "$BACKUP_STORAGE_DIR" ]; then
        mkdir -p "$BACKUP_STORAGE_DIR" || { log_error "创建storage备份目录失败"; return 1; }
    fi
    cp "$STORAGE_JSON" "$BACKUP_STORAGE_DIR/storage$timestamp.json" || { log_error "备份storage.json失败"; return 1; }
    log_info "Storage.json已备份到: $BACKUP_STORAGE_DIR/storage$timestamp.json"
}

# 生成随机 ID
generate_random_id() {
    head -c 16 /dev/urandom | xxd -p
}

# 生成随机 UUID
generate_uuid() {
    uuidgen
}

# 生成新的配置
generate_new_config() {
    local new_machine_id=$(generate_random_id)
    local new_sqm_id=$(generate_random_id)
    local new_mac_id=$(generate_random_id)$(generate_random_id)
    local new_machine_id2=$(generate_random_id)$(generate_random_id)
    local new_device_id=$(generate_uuid)

    # 更新machine-id文件
    echo "$new_machine_id" | sudo tee "$MACHINE_ID_PATH" > /dev/null || { log_error "更新machine-id失败"; return 1; }
    
    # 更新storage.json
    if [ -f "$STORAGE_JSON" ]; then
        sed -i "s/\"telemetry.sqmId\": \"[^\"]*\"/\"telemetry.sqmId\": \"$new_sqm_id\"/" "$STORAGE_JSON"
        sed -i "s/\"telemetry.macMachineId\": \"[^\"]*\"/\"telemetry.macMachineId\": \"$new_mac_id\"/" "$STORAGE_JSON"
        sed -i "s/\"telemetry.machineId\": \"[^\"]*\"/\"telemetry.machineId\": \"$new_machine_id2\"/" "$STORAGE_JSON"
        sed -i "s/\"telemetry.devDeviceId\": \"[^\"]*\"/\"telemetry.devDeviceId\": \"$new_device_id\"/" "$STORAGE_JSON"
        log_info "配置文件更新成功"
    else
        log_error "storage.json文件不存在"
        return 1
    fi
}

# 获取计数
get_count() {
    if [ -f "$COUNT_FILE" ]; then
        cat "$COUNT_FILE"
    else
        echo "0"
    fi
}

# 更新计数
update_count() {
    local current_count=$(get_count)
    local new_count=$((current_count + 1))
    echo "$new_count" > "$COUNT_FILE"
    echo "$new_count"
}

# 主函数
main() {
    clear
    echo -e "
                    _        __    ___   ___  
    / \   _ __   __| |_   _ / /_  ( _ ) ( _ ) 
   / _ \ | '_ \ / _\` | | | | '_ \ / _ \ / _ \ 
  / ___ \| | | | (_| | |_| | (_) | (_) | (_) |
 /_/   \_\_| |_|\__,_|\__, |\___/ \___/ \___/ 
                      |___/                   
    "
    echo -e "${YELLOW} 开源地址:https://gitee.com/Andy688/cursor-free${NC}"
    echo
    echo
    echo -e "${YELLOW}----------------------------------${NC}"
<<<<<<< HEAD
    echo -e "${YELLOW} ********微信公众号:汇友软件服务*****    ${NC}"
=======
    echo -e "${YELLOW}  *******微信公众号还建设中****    ${NC}"
>>>>>>> eebfe42204a7a9581dd6eb3de66c7b956caa8f92
    echo -e "${YELLOW}  可以关注开源社区gitee作者@Andy688${NC}"
    echo -e "${YELLOW} 你的star对我真的很重要${NC}"
    echo -e "${YELLOW}----------------------------------${NC}"
    echo -e "${YELLOW} 开源地址:https://gitee.com/Andy688/cursor-free${NC}"
    echo

    # 检查依赖
    log_info "正在检查系统环境..."
    check_dependencies || { log_error "环境检查失败，请检查错误信息"; exit 1; }
    
    # 检查配置文件
    check_config

    # 执行主要功能
    log_info "开始备份系统ID..."
    backup_system_id || exit 1
    
    log_info "开始备份storage.json..."
    backup_storage_json || exit 1
    
    log_info "开始生成新配置..."
    generate_new_config || exit 1
    
    log_info "所有操作已完成！"

     # 执行主要功能
    log_info "开始备份系统ID..."
    backup_system_id || exit 1
    
    log_info "开始备份storage.json..."
    backup_storage_json || exit 1
    
    log_info "开始生成新配置..."
    generate_new_config || exit 1
    
    # 更新并显示计数
    local count=$(update_count)
    log_info "所有操作已完成！"
    echo -e "${YELLOW}已经续杯 $count 次了，继续努力！${NC}"
}

main